'''
/*
 * @Author: wevsmy 
 * @Date: 2017-10-23 21:29:13 
 * @Last Modified by: wevsmy
 * @Last Modified time: 2017-10-24 10:46:07
 */
'''
from multiprocessing import Pool,Manager
import os

def copyFileTask(FileName,oldFileName,newFileName,queue):
    #完成拷贝一个文件的功能
    fr = open(oldFileName + "/" + FileName,'r')
    # 创建新文件
    fw = open(newFileName + "/" + FileName, 'w')
    # 把旧文件中的数据，一行一行的进行复制到新文件中
    for lineContent in fr.readlines():
        fw.write(lineContent)
    # 关闭文件
    fr.close()
    fw.close()
    queue.put(FileName)

def main():

    while True:
        #获取需要拷贝的文件家
        oldfileName = input("请输入你要在当前路径下的拷贝的文件夹名字：")
        #判断需要拷贝的文件夹是否存在
        if not os.path.exists(oldfileName):
            print("错误：您需要拷贝的文件夹在当前路径下不存在")
        else: 
            break
    #创建一个新的文件夹
    newfileName = oldfileName + "-cp"
    #判断拷贝后的文件夹是否存在
    if not os.path.exists(newfileName):
        #不存在创建
        os.mkdir(newfileName)
    else: 
        #存在
        print("错误：%s 文件夹在当前路径下存在,拷贝任务取消,程序退出"%newfileName)
        exit()

    #获取old文件夹的所有文件名
    listFileName = os.listdir(oldfileName)

    #创建进程池
    pool = Pool(5)
    #创建进程池消息队列
    queue = Manager().Queue()

    for name in listFileName:
        pool.apply_async(copyFileTask,args=(name,oldfileName,newfileName,queue))

    num = 0
    allNum = len(listFileName)
    while num < allNum:
        queue.get()
        num += 1
        copyRate = num/allNum
        print("\rcopy的进度是：%.2f%%"%(copyRate*100),end="")
    
    print("\n已完成拷贝。")

#此程序只能用于拷贝文件夹下全是文件的，如果有文件夹的话，不会拷贝文件夹
if __name__ == '__main__':
    main()
    
